/*
 * Copyright (c) 2019.
 * http://www.ulabcare.com
 */

package com.mt.roll.passport.params;

import com.mt.roll.core.enums.AppTypeEnum;
import com.mt.roll.core.enums.UserTypeEnum;
import com.mt.roll.core.params.BasePageParam;
import com.mt.roll.core.validator.constraints.Enum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * <p>
 * 登录会话日志
 * </p>
 *
 * @author jiff
 * @since 2019-07-20
 */
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@Data
@Builder
@ApiModel("查询会话日志请求对象")
public class QueryLoginLogParam extends BasePageParam {

    private static final long serialVersionUID = 1L;


    /**
     * 会话ID
     */
    @ApiModelProperty("会话ID")
    private String sessionId;

    /**
     * 父会话ID，漫游登录时需要保存发起漫游用户的会话ID
     */
    @ApiModelProperty("父会话ID，漫游登录时需要保存发起漫游用户的会话ID")
    private String parentSessionId;

    /**
     * 统一用户ID
     */
    @ApiModelProperty("统一用户ID")
    private Long passportUserId;

    /**
     * 用户ID
     */
    @ApiModelProperty("用户ID")
    private Long userId;

    /**
     * 合作伙伴ID，合作伙伴用户或者医院用户登录时会存储
     */
    @ApiModelProperty("合作伙伴ID，合作伙伴用户或者医院用户登录时会存储")
    private Long partnerId;

    /**
     * 医院ID
     */
    @ApiModelProperty("医院ID")
    private Long hospitalId;

    /**
     * 组织ID
     */
    @ApiModelProperty("组织ID")
    private Long orgId;

    /**
     * 手机号
     */
    @ApiModelProperty("手机号")
    private String mobile;

    /**
     * 用户名称
     */
    @ApiModelProperty("用户名称")
    private String userName;

    /**
     * 用户类型：1、平台用户，2、合作伙伴用户，3、医院用户，4、患者
     */
    @ApiModelProperty(value = "用户类型：1、平台用户，2、合作伙伴用户，3、医院用户，4、患者", example = "1")
    @Enum(message = "非法的用户类型", target = {UserTypeEnum.class})
    private Integer userType;

    /**
     * 应用类型：1、pc，2、app，3、wechat，4、miniapp
     */
    @ApiModelProperty(value = "应用类型：\n" +
            "1、\tpc\n" +
            "2、\tapp\n" +
            "3、\twechat\n" +
            "4、\tminiapp", required = false, example = "1")
    @Enum(message = "非法的应用类型", target = {AppTypeEnum.class})
    private Integer appType;

    /**
     * 应用编码：暂未使用
     */
    @ApiModelProperty("应用编码：暂未使用")
    private Integer appCode;

    /**
     * 登录类型：1、自主登录，2、漫游登录
     */
    @ApiModelProperty("登录类型：1、自主登录，2、漫游登录")
    private Integer loginType;

    /**
     * 退出类型：1、自主退出，2、管理退出，3，超时退出
     */
    @ApiModelProperty(value = "退出类型：1、自主退出，2、管理退出，3，超时退出", example = "1")
    private Integer logoutType;

    /**
     * 异常状态：0、正常，1、省份异常，2、地市异常，3、区县异常
     */
    @ApiModelProperty(value = "异常状态：0、正常，1、省份异常，2、地市异常，3、区县异常", example = "0")
    private Integer abnormalStatus;

    /**
     * 开始时间
     */
    @ApiModelProperty(value = "开始时间，格式：yyyy-MM-dd", example = "2019-08-01")
    private String startTime;

    /**
     * 结束时间
     */
    @ApiModelProperty(value = "结束时间，格式：yyyy-MM-dd", example = "2019-08-01")
    private String endTime;

    /**
     * 退出开始时间
     */
    @ApiModelProperty(value = "退出开始时间，格式：yyyy-MM-dd", example = "2019-08-01")
    private String logoutStartTime;

    /**
     * 退出结束时间
     */
    @ApiModelProperty(value = "退出结束时间，格式：yyyy-MM-dd", example = "2019-08-01")
    private String logoutEndTime;

    /**
     * 设备类型
     */
    @ApiModelProperty("设备类型")
    private String deviceClass;

    /**
     * 设备名称
     */
    @ApiModelProperty("设备名称")
    private String deviceName;

    /**
     * 设备品牌
     */
    @ApiModelProperty("设备品牌")
    private String deviceBrand;

    /**
     * 操作系统
     */
    @ApiModelProperty("操作系统")
    private String os;

    /**
     * 浏览器
     */
    @ApiModelProperty("浏览器")
    private String browser;

    /**
     * 省份
     */
    @ApiModelProperty("省份")
    private String province;

    /**
     * 地市
     */
    @ApiModelProperty("地市")
    private String city;

    /**
     * 区县
     */
    @ApiModelProperty("区县")
    private String county;

    /**
     * IP地址
     */
    @ApiModelProperty(value = "IP地址", example = "192.168.1.1")
    private String ip;


}
